package com.xinyue.design.strategy.wayTwo;

/**上下文，负责和具体的策略类交互，是算法管家。
 * <name>
 * 算法管家类
 * <name>
 * 通常上下文会持有一个真正的策略实现，上下文还可以让具体的策略类来获取上下文的数据，甚至让具体的策略类来回调上下文的方法。
 * 
 * 实现方式二：传入具体的数据参数
 * 
 *  对于一系列算法的实现上存在公共功能的情况，策略模式可以有如下三种实现方式：
 *  1、在上下文当中实现公共功能，让所有具体的策略算法回调这些方法。<推荐>
 *  2、把策略的接口改成抽象类，然后在里面实现具体算法的公共功能。<推荐>
 *  3、给所有的策略算法定义一个抽象的父类，让这个父类去实现策略的接口，然后在这个父类里面去实现公共的功能。
 */
public class PriceContext {
	
    //上下文对象，持有一个具体的策略对象。算法管家管理算法。
    private PriceStrategy priceStrategy;
    
    //构造器 传入一个具体的策略对象
    public PriceContext(PriceStrategy priceStrategy) {
        this.priceStrategy = priceStrategy;
     }
    
    //上下文对客户端提供的操作接口，可以有参数和返回值
    public double clientPrice(double price) {
        return this.priceStrategy.clientPrice(price);
    }
}
